package com.kgcx.common.annotation.securety;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 敏感字段注解，使用此注解的属性可在传入或者输出时自动解密解密，以及隐藏部分或所有数据
 *
 * @author 吴刚林
 * @date 2018/5/10
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Sensitive {

    /**
     * 是否加密
     *
     * @return
     */
    boolean isEncrypt() default false;

    /**
     * 加密key
     *
     * @return
     */
    byte[] key() default {'T', 'h', 'i', 's', 'I', 's', 'A', 'S', 'e', 'c', 'r', 'e', 't', 'K', 'e', 'y'};

    /**
     * 输出是否隐藏
     *
     * @return
     */
    boolean hide() default false;

    /**
     * 隐藏替换的字符
     *
     * @return
     */
    String hideWord() default "*";

    /**
     * 隐藏起始位置
     *
     * @return
     */
    int hideStartIndex() default 0;

    /**
     * 隐藏终止位置，-1为到最后
     *
     * @return
     */
    int hideEndIndex() default 0;

}
